home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 June / PCWorld_2007-06_cd.bin / zabezpeceni / spyeraser / spyeraser.exe / {app} / SpyEraser.dll / 2110 / FLEXCROLL.JS < prev    next >
Text File  |  2007-04-23  |  21KB  |  422 lines

  1. /*
  2. fleXcroll v1.8.5 Public License Version
  3. This license text has to stay intact at all times:
  4. Cross Browser Custom Scroll Bar Script by Hesido.
  5. Public version - Free for non-commercial uses.
  6.  
  7. This script cannot be used in any commercially built
  8. web sites, or in sites that relates to commercial
  9. activities. 
  10.  
  11. Derivative works are only allowed for personal uses,
  12. and they cannot be redistributed.
  13. For licensing options:
  14. Contact Emrah BASKAYA @ www.hesido.com
  15.  
  16. FleXcroll Public Key Code: 20050907122003339
  17. MD5 hash for this license: 9ada3be4d7496200ab2665160807745d
  18.  
  19. End of license text---
  20. */
  21. function CSBfleXcroll(targetId){
  22. var dC=document,wD=window,nV=navigator;
  23. if(!dC.getElementById||dC.getElementById(targetId)==null||!dC.createElement||(nV.userAgent.indexOf('Safari')!=-1&&!(typeof(HTMLElement)!="undefined"&&HTMLElement.prototype))||nV.vendor=='KDE'||(nV.platform.indexOf('Mac')!=-1&&nV.userAgent.indexOf('MSIE')!=-1))return;
  24. var dDv=dC.getElementById(targetId);
  25. if(dDv.fleXcroll)return;
  26. dDv.fleXdata=new Object();var sC=dDv.fleXdata;
  27. sC.keyAct={_37:['-1s',0],_38:[0,'-1s'],_39:['1s',0],_40:[0,'1s'],_33:[0,'-1p'],_34:[0,'1p'],_36:[0,'-100p'],_35:[0,'+100p']};
  28. sC.wheelAct=["-2s","2s"];
  29. sC.baseAct=["-2s","2s"];
  30. var cDv=createDiv('contentwrapper',true),mDv=createDiv('mcontentwrapper',true),tDv=createDiv('scrollwrapper',true),pDv=createDiv('copyholder',true);
  31. var iDv=createDiv('domfixdiv',true),fDv=createDiv('zoomdetectdiv',true); stdMode=false;
  32. pDv.sY.border='1px solid blue';pDv.fHide();
  33. dDv.style.overflow='hidden';
  34. fDv.sY.fontSize="12px";fDv.sY.height="1em";fDv.sY.width="1em";fDv.sY.position="absolute";fDv.sY.zIndex="-999";fDv.fHide();
  35. var brdHeight=dDv.offsetHeight,brdWidth=dDv.offsetWidth;
  36. copyStyles(dDv,pDv,'0px',['border-left-width','border-right-width','border-top-width','border-bottom-width']);
  37. var intlHeight=dDv.offsetHeight,intlWidth=dDv.offsetWidth,brdWidthLoss=brdWidth-intlWidth,brdHeightLoss=brdHeight-intlHeight;
  38. var oScrollY=(dDv.scrollTop)?dDv.scrollTop:0,oScrollX=(dDv.scrollLeft)?dDv.scrollLeft:0;
  39. var focusProtectList=['textarea','input','select'];
  40. sC.scroller=[];sC.forcedBar=[];sC.containerSize=sC.cntRSize=[];sC.contentSize=sC.cntSize=[];sC.edge=[false,false];
  41. sC.reqS=[];sC.barSpace=[0,0];sC.forcedHide=[];sC.forcedPos=[];sC.paddings=[];
  42. while (dDv.firstChild) {cDv.appendChild(dDv.firstChild)};
  43. cDv.appendChild(iDv);dDv.appendChild(mDv);dDv.appendChild(pDv);
  44. if(getStyle(dDv,'position')!='absolute') dDv.style.position="relative";
  45.  
  46. mDv.sY.width="100px";mDv.sY.height="100px";mDv.sY.top="0px";mDv.sY.left="0px";
  47. copyStyles(dDv,pDv,"0px",['padding-left','padding-top','padding-right','padding-bottom']);
  48. var postWidth=dDv.offsetWidth,postHeight=dDv.offsetHeight,mHeight;
  49. mHeight=mDv.offsetHeight;mDv.sY.borderBottom="2px solid black";
  50. if(mDv.offsetHeight>mHeight)stdMode=true;mDv.sY.borderBottomWidth="0px";
  51. copyStyles(pDv,dDv,false,['padding-left','padding-top','padding-right','padding-bottom']);
  52. findPos(mDv);findPos(dDv);
  53. sC.paddings[0]=mDv.yPos-dDv.yPos;sC.paddings[2]=mDv.xPos-dDv.xPos;
  54. dDv.style.paddingTop=getStyle(dDv,"padding-bottom");dDv.style.paddingLeft=getStyle(dDv,"padding-right");
  55. findPos(mDv);findPos(dDv);
  56. sC.paddings[1]=mDv.yPos-dDv.yPos;sC.paddings[3]=mDv.xPos-dDv.xPos;
  57. dDv.style.paddingTop=getStyle(pDv,"padding-top");dDv.style.paddingLeft=getStyle(pDv,"padding-left");
  58. var padWidthComp=sC.paddings[2]+sC.paddings[3],padHeightComp=sC.paddings[0]+sC.paddings[1];
  59.  
  60. copyStyles(dDv,mDv,false,['padding-left','padding-right','padding-top','padding-bottom']);
  61. tDv.sY.width=dDv.offsetWidth+'px';tDv.sY.height=dDv.offsetHeight+'px';
  62. mDv.sY.width=postWidth+'px'; mDv.sY.height=postHeight+'px';
  63. tDv.sY.position='absolute';tDv.sY.top='0px';tDv.sY.left='0px';
  64. tDv.fHide();
  65.  
  66. mDv.appendChild(cDv);dDv.appendChild(tDv);tDv.appendChild(fDv);
  67.  
  68. cDv.sY.position='relative';mDv.sY.position='relative';
  69. cDv.sY.top="0";cDv.sY.width="100%";//fix IE7
  70. mDv.sY.overflow='hidden';
  71. mDv.sY.left="-"+sC.paddings[2]+"px";
  72. mDv.sY.top="-"+sC.paddings[0]+"px";
  73. sC.zTHeight=fDv.offsetHeight;
  74.  
  75. sC.getContentWidth=function(){
  76.     var cChilds=cDv.childNodes,maxCWidth=compPad=0;
  77.     for(var i=0;i<cChilds.length;i++){if(cChilds[i].offsetWidth){maxCWidth=Math.max(cChilds[i].offsetWidth,maxCWidth)}};
  78.     sC.cntRSize[0]=((sC.reqS[1]&&!sC.forcedHide[1])||sC.forcedBar[1])?dDv.offsetWidth-sC.barSpace[0]:dDv.offsetWidth;
  79.     sC.cntSize[0]=maxCWidth+padWidthComp;
  80.     return sC.cntSize[0];
  81.     };
  82. sC.getContentHeight=function(){
  83.     sC.cntRSize[1]=((sC.reqS[0]&&!sC.forcedHide[0])||sC.forcedBar[0])?dDv.offsetHeight-sC.barSpace[1]:dDv.offsetHeight;
  84.     sC.cntSize[1]=cDv.offsetHeight+padHeightComp-2;
  85.     return sC.cntSize[1];
  86.     };
  87.  
  88. sC.fixIEDispBug=function(){cDv.sY.display='none';cDv.sY.display='block';};
  89. sC.setWidth=function(){mDv.sY.width=(stdMode)?(sC.cntRSize[0]-padWidthComp-brdWidthLoss)+'px':sC.cntRSize[0]+'px';};
  90. sC.setHeight=function(){mDv.sY.height=(stdMode)?(sC.cntRSize[1]-padHeightComp-brdHeightLoss)+'px':sC.cntRSize[1]+'px';};
  91.  
  92. sC.createScrollBars=function(){
  93.     sC.getContentWidth();sC.getContentHeight();
  94.     //vert
  95.     tDv.vrt=new Array();var vrT=tDv.vrt;
  96.     createScrollBars(vrT,'vscroller');
  97.     vrT.barPadding=[parseInt(getStyle(vrT.sBr,'padding-top')),parseInt(getStyle(vrT.sBr,'padding-bottom'))];
  98.     vrT.sBr.sY.padding='0px';vrT.sBr.curPos=0;vrT.sBr.vertical=true;
  99.     vrT.sBr.indx=1; cDv.vBar=vrT.sBr;
  100.     prepareScroll(vrT,0);sC.barSpace[0]=vrT.sDv.offsetWidth;sC.setWidth();
  101.     //horiz
  102.     tDv.hrz=new Array();var hrZ=tDv.hrz;
  103.     createScrollBars(hrZ,'hscroller');
  104.     hrZ.barPadding=[parseInt(getStyle(hrZ.sBr,'padding-left')),parseInt(getStyle(hrZ.sBr,'padding-right'))];
  105.     hrZ.sBr.sY.padding='0px';hrZ.sBr.curPos=0;hrZ.sBr.vertical=false;
  106.     hrZ.sBr.indx=0; cDv.hBar=hrZ.sBr;
  107.     if(wD.opera) hrZ.sBr.sY.position='relative';
  108.     prepareScroll(hrZ,0);
  109.     sC.barSpace[1]=hrZ.sDv.offsetHeight;sC.setHeight();
  110.     tDv.sY.height=dDv.offsetHeight+'px';
  111.     // jog
  112.     hrZ.jBox=createDiv('scrollerjogbox');
  113.     tDv.appendChild(hrZ.jBox);hrZ.jBox.onmousedown=function(){
  114.         hrZ.sBr.scrollBoth=true;sC.goScroll=hrZ.sBr;hrZ.sBr.clicked=true;
  115.         hrZ.sBr.moved=false;tDv.vrt.sBr.moved=false;
  116.         addTrggr(dC,'selectstart',retFalse);addTrggr(dC,'mousemove',mMoveBar);addTrggr(dC,'mouseup',mMouseUp);
  117.         return false;
  118.     };
  119. };
  120.  
  121. sC.goScroll=null;
  122. sC.createScrollBars();
  123. cDv.removeChild(iDv);
  124.  
  125. if(!addChckTrggr(dDv,'mousewheel',mWheelProc)||!addChckTrggr(dDv,'DOMMouseScroll',mWheelProc)){dDv.onmousewheel=mWheelProc;};
  126. dDv.setAttribute('tabIndex','0');
  127.  
  128. addTrggr(dDv,'keydown',function(e){
  129.     if(dDv.focusProtect) return;
  130.     if(!e){var e=wD.event;};var pK=e.keyCode; sC.pkeY=pK;
  131.     if(sC.keyAct['_'+pK]&&!window.opera){dDv.contentScroll(sC.keyAct['_'+pK][0],sC.keyAct['_'+pK][1],true);if(e.preventDefault) e.preventDefault();return false;};
  132.     });
  133. addTrggr(dDv,'keypress',function(e){//make Opera Happy
  134.     if(dDv.focusProtect) return;
  135.     if(!e){var e=wD.event;};var pK=e.keyCode;
  136.     if(sC.keyAct['_'+pK]){dDv.contentScroll(sC.keyAct['_'+pK][0],sC.keyAct['_'+pK][1],true);if(e.preventDefault) e.preventDefault();return false;};
  137. });
  138.  
  139. addTrggr(dDv,'keyup',function(){sC.pkeY=false});
  140.  
  141. addTrggr(dC,'mouseup',intClear);
  142. addTrggr(dDv,'mousedown',function(e){
  143.     if(!e) e=wD.event;
  144.     var cTrgt=(e.target)?e.target:(e.srcElement)?e.srcElement:false;
  145.     if(!cTrgt||(cTrgt.className&&cTrgt.className.match(RegExp("\\bscrollgeneric\\b")))) return;
  146.     sC.inMposX=e.clientX;sC.inMposY=e.clientY;
  147.     pageScrolled();findPos(dDv);intClear();
  148.     addTrggr(dC,'mousemove',tSelectMouse);
  149.     sC.mTBox=[dDv.xPos+10,dDv.xPos+sC.cntRSize[0]-10,dDv.yPos+10,dDv.yPos+sC.cntRSize[1]-10];
  150. });
  151.  
  152. function tSelectMouse(e){if(!e) e=wD.event;
  153.     var mX=e.clientX,mY=e.clientY,mdX=mX+sC.xScrld,mdY=mY+sC.yScrld;
  154.     sC.mOnXEdge=(mdX<sC.mTBox[0]||mdX>sC.mTBox[1])?1:0;
  155.     sC.mOnYEdge=(mdY<sC.mTBox[2]||mdY>sC.mTBox[3])?1:0;
  156.     sC.xAw=mX-sC.inMposX;sC.yAw=mY-sC.inMposY;
  157.     sC.sXdir=(sC.xAw>40)?1:(sC.xAw<-40)?-1:0;sC.sYdir=(sC.yAw>40)?1:(sC.yAw<-40)?-1:0;
  158.     if((sC.sXdir!=0||sC.sYdir!=0)&&!sC.tSelectFunc) sC.tSelectFunc=wD.setInterval(function(){
  159.         if(sC.sXdir==0&&sC.sYdir==0){wD.clearInterval(sC.tSelectFunc);sC.tSelectFunc=false;return;};pageScrolled();
  160.         if(sC.mOnXEdge==1||sC.mOnYEdge==1) dDv.contentScroll((sC.sXdir*sC.mOnXEdge)+"s",(sC.sYdir*sC.mOnYEdge)+"s",true);
  161.     },45)
  162. }
  163. function intClear(){
  164.     remTrggr(dC,'mousemove',tSelectMouse);if(sC.tSelectFunc) wD.clearInterval(sC.tSelectFunc);sC.tSelectFunc=false;
  165.     if(sC.barClickRetard) wD.clearTimeout(sC.barClickRetard); if(sC.barClickScroll) wD.clearInterval(sC.barClickScroll);
  166. }
  167. function pageScrolled(){
  168.     sC.xScrld=(wD.pageXOffset)?wD.pageXOffset:(dC.documentElement&&dC.documentElement.scrollLeft)?dC.documentElement.scrollLeft:0;
  169.     sC.yScrld=(wD.pageYOffset)?wD.pageYOffset:(dC.documentElement&&dC.documentElement.scrollTop)?dC.documentElement.scrollTop:0;
  170. }
  171.  
  172. dDv.scrollUpdate=function(recurse){
  173.     if(tDv.getSize[1]()===0||tDv.getSize[0]()===0) return;
  174.     cDv.sY.padding='1px';var reqH=sC.reqS[0],reqV=sC.reqS[1],vBr=tDv.vrt,hBr=tDv.hrz,vUpReq,hUpReq,cPSize=[];
  175.     tDv.sY.width=dDv.offsetWidth-brdWidthLoss+'px';tDv.sY.height=dDv.offsetHeight-brdHeightLoss+'px';
  176.     cPSize[0]=sC.cntRSize[0];cPSize[1]=sC.cntRSize[1];
  177.     sC.reqS[0]=sC.getContentWidth()>sC.cntRSize[0];
  178.     sC.reqS[1]=sC.getContentHeight()>sC.cntRSize[1];
  179.     var stateChange=(reqH!=sC.reqS[0]||reqV!=sC.reqS[1]||cPSize[0]!=sC.cntRSize[0]||cPSize[1]!=sC.cntRSize[1])?true:false;
  180.     vBr.sDv.setVisibility(sC.reqS[1]);hBr.sDv.setVisibility(sC.reqS[0]);
  181.     vUpReq=(sC.reqS[1]||sC.forcedBar[1]);hUpReq=(sC.reqS[0]||sC.forcedBar[0]);
  182.     sC.getContentWidth();sC.getContentHeight();sC.setHeight();sC.setWidth();
  183.     if(!sC.reqS[0]||!sC.reqS[1]||sC.forcedHide[0]||sC.forcedHide[1]) hBr.jBox.fHide();
  184.     else hBr.jBox.fShow();
  185.     if(vUpReq) updateScroll(vBr,(hUpReq&&!sC.forcedHide[0])?sC.barSpace[1]:0);else cDv.sY.top="0";
  186.     if(hUpReq) updateScroll(hBr,(vUpReq&&!sC.forcedHide[1])?sC.barSpace[0]:0);else cDv.sY.left="0";
  187.     if(stateChange&&!recurse) dDv.scrollUpdate(true);
  188.     cDv.sY.padding='0px';
  189. };
  190.  
  191. dDv.commitScroll=dDv.contentScroll=function(xPos,yPos,relative){
  192.     var reT=[[false,false],[false,false]],Bar;
  193.     if((xPos||xPos===0)&&sC.scroller[0]){xPos=calcCScrollVal(xPos,0);Bar=tDv.hrz.sBr;Bar.trgtScrll=(relative)?Math.min(Math.max(Bar.mxScroll,Bar.trgtScrll-xPos),0):-xPos;Bar.contentScrollPos();reT[0]=[-Bar.trgtScrll,-Bar.mxScroll]}
  194.     if((yPos||yPos===0)&&sC.scroller[1]){yPos=calcCScrollVal(yPos,1);Bar=tDv.vrt.sBr;Bar.trgtScrll=(relative)?Math.min(Math.max(Bar.mxScroll,Bar.trgtScrll-yPos),0):-yPos;Bar.contentScrollPos();reT[1]=[-Bar.trgtScrll,-Bar.mxScroll]}
  195.     return reT;
  196. };
  197.  
  198. copyStyles(pDv,dDv,'0px',['border-left-width','border-right-width','border-top-width','border-bottom-width']);
  199.  
  200. dDv.removeChild(pDv);
  201. dDv.fleXcroll=true;
  202. dDv.scrollUpdate();
  203. dDv.contentScroll(oScrollX,oScrollY,true);
  204. tDv.fShow();
  205.  
  206. sC.sizeChangeDetect=wD.setInterval(function(){
  207. var n=fDv.offsetHeight;if(n!=sC.zTHeight){dDv.scrollUpdate();sC.zTHeight=n};
  208. },2500);
  209.  
  210. function calcCScrollVal(v,i){
  211.     var stR=v.toString();v=parseFloat(stR);
  212.     return parseInt((stR.match(/p$/))?v*sC.cntRSize[i]*0.9:(stR.match(/s$/))?v*sC.cntRSize[i]*0.1:v);
  213. }
  214. function camelConv(spL){
  215.     var spL=spL.split('-'),reT=spL[0],i;
  216.     for(i=1;parT=spL[i];i++) {reT +=parT.charAt(0).toUpperCase()+parT.substr(1);}
  217.     return reT;
  218. }
  219. function getStyle(elem,style){
  220.     if(wD.getComputedStyle) return wD.getComputedStyle(elem,null).getPropertyValue(style);
  221.     if(elem.currentStyle) return elem.currentStyle[camelConv(style)];
  222.     return false;
  223. };
  224.  
  225. function copyStyles(src,dest,replaceStr,sList){
  226.     var camelList = new Array();
  227.     for (var i=0;i<sList.length;i++){
  228.         camelList[i]=camelConv(sList[i]);
  229.         dest.style[camelList[i]] = getStyle(src,sList[i],camelList[i]);
  230.         if(replaceStr) src.style[camelList[i]] = replaceStr;
  231.     }
  232. };
  233. function createDiv(typeName,noGenericClass){
  234.     var nDiv=dC.createElement('div');
  235.     nDiv.id=targetId+'_'+typeName;
  236.     nDiv.className=(noGenericClass)?typeName:typeName+' scrollgeneric';
  237.     nDiv.getSize=[function(){return nDiv.offsetWidth;},function(){return nDiv.offsetHeight;}];
  238.     nDiv.setSize=[function(sVal){nDiv.sY.width=sVal;},function(sVal){nDiv.sY.height=sVal;}];
  239.     nDiv.getPos=[function(){return getStyle(nDiv,"left");},function(){return getStyle(nDiv,"top");}];
  240.     nDiv.setPos=[function(sVal){nDiv.sY.left=sVal;},function(sVal){nDiv.sY.top=sVal;}];
  241.     nDiv.fHide=function(){nDiv.sY.visibility="hidden"};
  242.     nDiv.fShow=function(){nDiv.sY.visibility="visible"};
  243.     nDiv.sY=nDiv.style;
  244.     return nDiv;
  245. };
  246. function createScrollBars(ary,bse){
  247.     ary.sDv=createDiv(bse+'base');ary.sFDv=createDiv(bse+'basebeg');
  248.     ary.sSDv=createDiv(bse+'baseend');ary.sBr=createDiv(bse+'bar');
  249.     ary.sFBr=createDiv(bse+'barbeg');ary.sSBr=createDiv(bse+'barend');
  250.     tDv.appendChild(ary.sDv);ary.sDv.appendChild(ary.sBr);
  251.     ary.sDv.appendChild(ary.sFDv);ary.sDv.appendChild(ary.sSDv);
  252.     ary.sBr.appendChild(ary.sFBr);ary.sBr.appendChild(ary.sSBr);
  253. };
  254. function prepareScroll(bAr,reqSpace){
  255.     var sDv=bAr.sDv,sBr=bAr.sBr,i=sBr.indx;
  256.     sBr.minPos=bAr.barPadding[0];
  257.     sBr.ofstParent=sDv;
  258.     sBr.mDv=mDv;
  259.     sBr.scrlTrgt=cDv;
  260.     sBr.targetSkew=0;
  261.     updateScroll(bAr,reqSpace,true);
  262.     
  263.     sBr.doScrollPos=function(){
  264.         sBr.curPos=(Math.min(Math.max(sBr.curPos,0),sBr.maxPos));
  265.         sBr.trgtScrll=parseInt((sBr.curPos/sBr.sRange)*sBr.mxScroll);
  266.         sBr.targetSkew=(sBr.curPos==0)?0:(sBr.curPos==sBr.maxPos)?0:sBr.targetSkew;
  267.         sBr.setPos[i](sBr.curPos+sBr.minPos+"px");
  268.         cDv.setPos[i](sBr.trgtScrll+sBr.targetSkew+"px");
  269.     };
  270.     
  271.     sBr.contentScrollPos=function(){
  272.         sBr.curPos=parseInt((sBr.trgtScrll*sBr.sRange)/sBr.mxScroll);
  273.         sBr.targetSkew=sBr.trgtScrll-parseInt((sBr.curPos/sBr.sRange)*sBr.mxScroll);
  274.         sBr.curPos=(Math.min(Math.max(sBr.curPos,0),sBr.maxPos));
  275.         sBr.setPos[i](sBr.curPos+sBr.minPos+"px");
  276.         sBr.setPos[i](sBr.curPos+sBr.minPos+"px");
  277.         cDv.setPos[i](sBr.trgtScrll+"px");
  278.     };
  279.     
  280.     sC.barZ=getStyle(sBr,'z-index');
  281.     sBr.sY.zIndex=(sC.barZ=="auto"||sC.barZ=="0")?2:sC.barZ;
  282.     mDv.sY.zIndex=getStyle(sBr,'z-index');
  283.  
  284.     sBr.onmousedown=function(){
  285.         sBr.clicked=true;sC.goScroll=sBr;sBr.scrollBoth=false;sBr.moved=false;
  286.         addTrggr(dC,'selectstart',retFalse);
  287.         addTrggr(dC,'mousemove',mMoveBar);
  288.         addTrggr(dC,'mouseup',mMouseUp);
  289.         return false;
  290.         };
  291.     
  292.     sBr.onmouseover=intClear;
  293.     
  294.     sDv.onmousedown=sDv.ondblclick=function(e){
  295.         if(!e){var e=wD.event;}
  296.         if(e.target&&(e.target==bAr.sFBr||e.target==bAr.sSBr||e.target==bAr.sBr)) return;
  297.         if(e.srcElement&&(e.srcElement==bAr.sFBr||e.srcElement==bAr.sSBr||e.srcElement==bAr.sBr)) return;
  298.         var relPos,mV=[];pageScrolled();sBr.mDv.scrollTop=0;sBr.mDv.scrollLeft=0;findPos(sBr);
  299.         relPos=(sBr.vertical)?e.clientY+sC.yScrld-sBr.yPos:e.clientX+sC.xScrld-sBr.xPos;
  300.         mV[sBr.indx]=(relPos<0)?sC.baseAct[0]:sC.baseAct[1];mV[1-sBr.indx]=0;
  301.         dDv.contentScroll(mV[0],mV[1],true);
  302.         intClear();
  303.         sC.barClickRetard=wD.setTimeout(function(){
  304.         sC.barClickScroll=wD.setInterval(function(){
  305.         dDv.contentScroll(mV[0],mV[1],true);},80)},425);
  306.         return false;
  307.     };
  308.     sDv.setVisibility=function(r){
  309.         if(r){sDv.fShow();
  310.         sC.forcedHide[i]=(getStyle(sDv,"visibility")=="hidden")?true:false;
  311.         if(!sC.forcedHide[i]) sBr.fShow(); else sBr.fHide();
  312.         sC.scroller[i]=true;classChange(sDv,"","flexinactive");}
  313.         else{sDv.fHide();sBr.fHide();
  314.         sC.forcedBar[i]=(getStyle(sDv,"visibility")!="hidden")?true:false;
  315.         sC.scroller[i]=false;sBr.curPos=0;cDv.setPos[i]('0px');
  316.         classChange(sDv,"flexinactive","");}
  317.         mDv.setPos[1-i]((sC.forcedPos[i]&&(r||sC.forcedBar[i])&&!sC.forcedHide[i])?sC.barSpace[1-i]-sC.paddings[i*2]+"px":"-"+sC.paddings[i*2]+"px");
  318.     };
  319.     sDv.onmouseclick = retFalse;
  320. };
  321.  
  322. function updateScroll(bAr,reqSpace,firstRun){
  323.     var sDv=bAr.sDv,sBr=bAr.sBr,sFDv=bAr.sFDv,sFBr=bAr.sFBr,sSDv=bAr.sSDv,sSBr=bAr.sSBr,i=sBr.indx;
  324.     sDv.setSize[i](tDv.getSize[i]()-reqSpace+'px');sDv.setPos[1-i](tDv.getSize[1-i]()-sDv.getSize[1-i]()+'px');
  325.     sC.forcedPos[i]=(parseInt(sDv.getPos[1-i]())===0)?true:false;
  326.     bAr.padLoss=bAr.barPadding[0]+bAr.barPadding[1];bAr.baseProp=parseInt((sDv.getSize[i]()-bAr.padLoss)*0.75);
  327.     sBr.aSize=Math.min(Math.max(Math.min(parseInt(sC.cntRSize[i]/sC.cntSize[i]*sDv.getSize[i]()),bAr.baseProp),45),bAr.baseProp);
  328.     sBr.setSize[i](sBr.aSize+'px');sBr.maxPos=sDv.getSize[i]()-sBr.getSize[i]()-bAr.padLoss;
  329.     sBr.curPos=Math.min(Math.max(0,sBr.curPos),sBr.maxPos);
  330.     sBr.setPos[i](sBr.curPos+sBr.minPos+'px');sBr.mxScroll=mDv.getSize[i]()-sC.cntSize[i];
  331.     sBr.sRange=sBr.maxPos;
  332.     sFDv.setSize[i](sDv.getSize[i]()-sSDv.getSize[i]()+'px');
  333.     sFBr.setSize[i](sBr.getSize[i]()-sSBr.getSize[i]()+'px');
  334.     sSBr.setPos[i](sBr.getSize[i]()-sSBr.getSize[i]()+'px');
  335.     sSDv.setPos[i](sDv.getSize[i]()-sSDv.getSize[i]()+'px');
  336.     if(!firstRun) sBr.doScrollPos();
  337.     sC.fixIEDispBug();
  338. };
  339.  
  340. addTrggr(wD,'load',function(){if(dDv.fleXcroll) dDv.scrollUpdate();});
  341. addTrggr(wD,'resize',function(){
  342. if(dDv.refreshTimeout) wD.clearTimeout(dDv.refreshTimeout);
  343. dDv.refreshTimeout=wD.setTimeout(function(){if(dDv.fleXcroll) dDv.scrollUpdate();},80);
  344. });
  345.  
  346. for(var j=0,inputName;inputName=focusProtectList[j];j++){
  347.     var inputList=dDv.getElementsByTagName(inputName);
  348.     for(var i=0,formItem;formItem=inputList[i];i++){
  349.     addTrggr(formItem,'focus',function(){dDv.focusProtect=true;});
  350.     addTrggr(formItem,'blur',onblur=function(){dDv.focusProtect=false;});
  351. }};
  352.  
  353. function retFalse(){return false;};
  354. function mMoveBar(e){
  355. if(!e){var e=wD.event;};
  356. var FCBar=sC.goScroll,movBr,maxx,xScroll,yScroll;
  357. if(FCBar==null) return;
  358. maxx=(FCBar.scrollBoth)?2:1;
  359. for (var i=0;i<maxx;i++){
  360.     movBr=(i==1)?FCBar.scrlTrgt.vBar:FCBar;
  361.     if(FCBar.clicked){
  362.     if(!movBr.moved){
  363.     movBr.mDv.scrollTop=0;movBr.mDv.scrollLeft=0;
  364.     findPos(movBr);findPos(movBr.ofstParent);movBr.pointerOffsetY=e.clientY-movBr.yPos;
  365.     movBr.pointerOffsetX=e.clientX-movBr.xPos;movBr.inCurPos=movBr.curPos;movBr.moved=true;
  366.     };
  367.     movBr.curPos=(movBr.vertical)?e.clientY-movBr.pointerOffsetY-movBr.ofstParent.yPos-movBr.minPos:e.clientX-movBr.pointerOffsetX-movBr.ofstParent.xPos-movBr.minPos;
  368.     if(FCBar.scrollBoth) movBr.curPos=movBr.curPos+(movBr.curPos-movBr.inCurPos);
  369.     movBr.doScrollPos();
  370.     } else movBr.moved=false;
  371.     };
  372. };
  373.  
  374. function mMouseUp(){
  375.     if(sC.goScroll!=null){sC.goScroll.clicked=false;}
  376.     sC.goScroll=null;
  377.     remTrggr(dC,'selectstart',retFalse);
  378.     remTrggr(dC,'mousemove',mMoveBar);
  379.     remTrggr(dC,'mouseup',mMouseUp);
  380. };
  381.  
  382. function mWheelProc(e){
  383.     if(!e) e=wD.event;
  384.     if(!this.fleXcroll) return;
  385.     var scrDv=this,vEdge,hEdge,hoverH=false,delta=0,iNDx;
  386.     hElem=(e.target)?e.target:(e.srcElement)?e.srcElement:this;
  387.     if(hElem.id&&hElem.id.match(/_hscroller/)) hoverH=true;
  388.     if(e.wheelDelta) delta=-e.wheelDelta;if(e.detail) delta=e.detail;
  389.     delta=(delta<0)?-1:+1;iNDx=(delta<0)?0:1;sC.edge[1-iNDx]=false;
  390.     if((sC.edge[iNDx]&&!hoverH)||(!sC.scroller[0]&&!sC.scroller[1])) return;
  391.     if(sC.scroller[1]&&!hoverH) scrollState=dDv.contentScroll(false,sC.wheelAct[iNDx],true);
  392.     vEdge=!sC.scroller[1]||hoverH||(sC.scroller[1]&&((scrollState[1][0]==scrollState[1][1]&&delta>0)||(scrollState[1][0]==0&&delta<0)));
  393.     if(sC.scroller[0]&&(!sC.scroller[1]||hoverH)) scrollState=dDv.contentScroll(sC.wheelAct[iNDx],false,true);
  394.     hEdge=!sC.scroller[0]||(sC.scroller[0]&&sC.scroller[1]&&vEdge&&!hoverH)||(sC.scroller[0]&&((scrollState[0][0]==scrollState[0][1]&&delta>0)||(scrollState[0][0]==0&&delta<0)));
  395.     if(vEdge&&hEdge&&!hoverH) sC.edge[iNDx]=true; else sC.edge[iNDx]=false;
  396.     if(e.preventDefault) e.preventDefault();
  397.     return false;
  398. };
  399.  
  400. function addTrggr(elm,eventname,func){if(!addChckTrggr(elm,eventname,func)&&elm.attachEvent) {elm.attachEvent('on'+eventname,func);}};
  401. function addChckTrggr(elm,eventname,func){if(elm.addEventListener){elm.addEventListener(eventname,func,false);wD.addEventListener("unload",function(){remTrggr(elm,eventname,func)},false);return true;} else return false;};
  402. function remTrggr(elm,eventname,func){if(!remChckTrggr(elm,eventname,func)&&elm.detachEvent) elm.detachEvent('on'+eventname,func);};
  403. function remChckTrggr(elm,eventname,func){if(elm.removeEventListener){elm.removeEventListener(eventname,func,false);return true;} else return false;};
  404.  
  405. function findPos(elem){ 
  406. //modified from firetree.net
  407.     var obj=elem,curleft=curtop=0;
  408.     if(obj.offsetParent){while(obj){curleft+=obj.offsetLeft;curtop+=obj.offsetTop;obj=obj.offsetParent;}}
  409.     else if(obj.x){curleft+=obj.x;curtop+=obj.y;}
  410.     elem.xPos=curleft;elem.yPos=curtop;
  411. };
  412.  
  413. function classChange(elem,addClass,remClass) { 
  414.     if(!elem.className) elem.className = '';var clsnm=elem.className;
  415.     if(addClass&&!clsnm.match(RegExp("\\b"+addClass+"\\b"))) clsnm=clsnm.replace(/(\S$)/,'$1 ')+addClass;
  416.     if(remClass) clsnm=clsnm.replace(RegExp("(\\s*\\b"+remClass+"\\b(\\s*))*","g"),'$2');
  417.     elem.className=clsnm;
  418. };
  419.  
  420. };
  421.  
  422.